package com.weiqiao.mall.service;

import com.weiqiao.mall.domain.CommodityEntity;
import com.weiqiao.mall.domain.WXCompanyConfEntity;
import com.weiqiao.mall.service.vo.CommodityTypeVO;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.springframework.data.domain.Pageable;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;


public interface ICommodityListService extends IBaseWeiXinService {

    /**
     * 商品管理--查询商品
     */
    List<CommodityEntity> findCommoditys(int company_id, Document doc, Pageable pageable);

    /**
     * App分页查询
     *
     * @param filter
     * @param sort
     * @param limit
     * @return
     */
    List<CommodityEntity> findCommoditys(int companyId, Bson filter, Bson sort, int limit);

    /**
     * 通过id查询
     *
     * @param company_id
     * @return
     */
    CommodityEntity findCommodityById(String commodity_id, int company_id);

    /**
     * 商品管理--统计商品数量
     *
     * @param bson 查询条件
     */
    int countCommodity(int companyId, Bson bson);

    /**
     * 商品管理--批量更新商品信息
     *
     * @param filter 查询条件
     * @param doc    更新内容
     */
    boolean updateCommoditys(int companyId, Bson filter, Document doc);

    /**
     * 根据条件导出商品信息
     *
     * @param filter
     * @return
     */
    List<Map<String, Object>> exportCommodityInfo(int companyId, Bson filter);

    /**
     * 商品管理--更新单个商品信息
     *
     * @param filter 查询条件
     * @param doc    更新内容
     */
    boolean updateState(int companyId, Bson filter, Document doc);

    /**
     * 商品管理--添加商品
     *
     * @param commodity 商品信息
     * @return
     */
    boolean addCommodity(CommodityEntity commodity);

    /**
     * 商品管理--查询商品
     *
     * @param filter
     */
    List<CommodityEntity> findCommoditys(int companyId, Bson filter);

    /**
     * 获取最近一次创建的商品信息
     *
     * @param request
     * @return
     */
    CommodityEntity getLatestCommodity(HttpServletRequest request);

    /**
     * 查询商品分类
     *
     * @param filter
     * @return
     */
    List<CommodityEntity> findCommodityByVarietyId(int companyId, Bson filter);

    /**
     * 根据参数字段排序
     *
     * @param request
     * @param pageable
     * @return
     */
    Pageable pageSort(HttpServletRequest request, Pageable pageable);

    /**
     * 根据商品id逻辑删除
     *
     * @param request
     * @return
     */
    Map deleteById(HttpServletRequest request);

    /**
     * 生产商品二维码
     *
     * @param request
     * @param companyConf
     * @return
     */
    Map createQrcode(HttpServletRequest request, WXCompanyConfEntity companyConf);

    /**
     * 判读是否可以删除商品分类
     *
     * @param commodityTypeVO
     * @return
     */
    Map deleteVariety(CommodityTypeVO commodityTypeVO);
}
